﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//int main()
//{
//	double a = 2;
//	double b = 1;
//	int i = 0;
//	int n = 0;
//	double sum = 0;
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		sum += a / b;
//		double tmp = a + b;
//		b = a;
//		a = tmp;
//	}
//	printf("%.2f", sum);
//}
//double Add(double a, double b,int n)
//{
//	
//	double sum = 0;
//	if (n > 0)
//	{
//		int tmp = a+b;
//		return  a / b + Add(tmp, a, n - 1);
//	}
//}
//int main()
//{
//	int n = 0;
//	double a = 2;
//	double b = 1;
//	scanf("%d", &n);
//	printf("%.2f", Add(a, b,n));
//	
//}

//0000 0000 0000 0000 0000 0000 0111 1110   126
//0000 0000 0000 0000 0000 0000 0000 0101   5 
//0000 0000 0000 0000 0000 0000 1000 0011   整形提升相加之后
//1111 1111 1111 1111 1111 1111 1000 0011   截取后补码
//1000 0000 0000 0000 0000 0000 0111 1101   结果-125
//int main()
//{
//	int n = 2147483648;
//	return 0;
//}


//void odd_prep(int arr[], int sz)
//{
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (arr[j] % 2 == 0)
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//			}
//		}
//	}
//}
//int main()
//{
//	int j = 0;
//	int i = 0;
//	int arr[10] = { 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	odd_prep(arr, sz);
//	for (j = 0; j < 10; j++)
//	{
//		printf("%d ",arr[j]);
//	}
//	return 0;
//}

//void test2()
//{
//	{
//		int n = 10;
//		int m = 20;
//		const int* p = &n;
//		*p = 20;//ok?
//		p = &m; //ok?
//	}
//}


//struct Point
//{
//	int x;
//	int y;
//};
//
// Point p1 = { 3,5 };
// struct Stu
// {
//	 char name[10];
//	 char id[20];
//	 int age;
//	 char sex[6];
// }stu1{"xx" ,"1234567",20,"nan"};
// int main()
//{
//	 struct Stu* p1 = &stu1;
//	printf("%d\n", stu1.age);
//	printf("%d\n", p1->age);
//	p1->age = 19;
//	printf("%d\n", p1->age);
//
//
//
//	return 0;
//}
//
//size_t my_strlen(char arr[])
//{
//	char* str1 = arr;
//	char* str2 = arr;
//	while (*(str2) != '\0')
//	{
//		str2++;
//	}
//	return str2 - str1;
//}
//size_t my_strlen(char arr[])
//{
//	char* str = arr;
//	while (*str != '\0')
//		str++;
//	return str - arr;
//}
//int main()
//{
//	char arr[] = "asdfghjkl";
//	size_t len = my_strlen(arr);
//	printf("%zd", len);
//	return 0;
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
//	int* str = arr;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int count = 0;
//	while (str < &arr[sz-1]+1)
//	{
//		printf("%d ", *str);
//		str++;
//		count++;
//	}
//	printf("%d", count);
//	printf("\n");
//	str = &arr[sz-1];
//	//while (str >=  &arr[0])
//	while (str > &arr[0]-1)
//	{
//		printf("%d ", *str);
//		str--;
//	}
//	return 0;
//
// 
// }
//int main()
//{
//	int n = 0;
//	scanf("%d", & n);
//	int a = n % 2;
//	double b = n / 2;
//	printf("%d\n", a);
//	printf("%lf\n", b);
//	return 0;
//
// }

//int main()
//{
//	int n = 0;
//	while (scanf("%d", &n) != EOF)
//	{
//
//	}
//	printf("hehe\n");
//}
//int main()
//{
//	int i = 0;
//	int arr[2] = { 1,2 };
//	int* p = arr;
//	for (i = 0; i < 2; i++)
//	{
//		*p++ = i;
//	}
//	return 0;
//}
//#include<assert.h>
//int main()
//{
//	int n = 0;
//	int* p = &n;
//	p = NULL;
//	assert(p != NULL);
//	return 0;
//}
//int main()
//{
//	printf("%d", -10 % -3);
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	int n = 10;
//	/*const int* p = &n;
//	int* p2 = p;*/
//	int* const p = &n;
//	int* p2 = p;
//	p2 = &a;
//
//}


//int main()
//{
//    char n = '0';
//    scanf("c", &n);
////    char* p = arr;
////while (*p != '\0')
////{
////    p++;
////}
////while (p > &arr[0] - 1)
////{
////    printf("%c", *p);
////    p--;
////}
//    return 0;
//}
// 


//数组旋转
//#include<string.h>
//void bubble_Sort(char arr[], int k, int len)
//{
//	for (int j = 0; j < k; j++)
//	{for (int i = 0; i < len-1;i++)
//		{
//		char tmp = arr[i];
//		arr[i] = arr[i + 1];
//		arr[i + 1] = tmp;
//		}
//	}
//}
//int main()
//{
//	char arr[10] = { 0 };
//	gets_s(arr);
//	int k = 0;
//	scanf("%d", &k);
//	int len = strlen(arr);
//	bubble_Sort(arr, k, len);
//	for (int i = 0; i < len; i++)
//	{
//		printf("%c", arr[i]);
//	}
//	return 0;
//}
// 
// 


//my_strlen
//size_t my_stelen(char* str)
//{
//	char* start = str;
//	while (*str != '\0')
//	{
//		str++;
//	}
//	return str - start;
//}
//int main()
//{
//	char arr[10] = "abcde";
//	size_t len =my_stelen(arr);
//	printf("%zd", len);
//	return 0;
//}




//冒泡排序
//void print(int* str, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(str + i));
//	}
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	print(arr,sz);
//	return 0;
//}
//void bubble_sort(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int flag = 1;
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//				flag = 0;
//			}
//		}
//		if (flag == 1)
//		{
//			break;
//		}
//	}
//}
//int main()
//{
//	int arr[10] = { 3,4,5,6,7,8,9,10,1,2 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	bubble_sort(arr, sz);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}




//判断时是否为旋转数组
//int is_spin(char arr1[], char arr2[], int k, int sz)
//{
//	int flag = 1;
//	int i = 0;
//	int j = 0;
//	for (j = 0; j < k; j++)
//	{
//		for (i = 0; i < sz - 1; i++)
//		{
//			int tmp = arr1[i];
//			arr1[i] = arr1[i + 1];
//			arr1[i + 1] = tmp;
//		}
//	}
//	for (i = 0; i < sz; i++)
//	{
//		if (arr1[i] != arr2[i])
//		{
//			flag = 0;
//		}
//	}
//	return flag;
//}
//int main()
//{
//	char arr1[10] = { 0 };
//	char arr2[10] = { 0 };
//	gets_s(arr1);
//	gets_s(arr2);
//	int sz = sizeof(arr1)/sizeof(arr1[0]);
//	int k = 0;
//	scanf("%d", &k);
//	int n=is_spin(arr1, arr2, k, sz);
//	if (n == 1)
//	{
//		printf("arr2是arr2旋转k次后的数组\n");
//	}
//	else
//	{
//		printf("arr2是arr2旋转k次后的数组\n");
//	}
//	return 0;
//}



//二维数组查找，时间复杂度<o(n)
//int find(int arr[3][4], int k, int x,int y)
//{
//	int row = x;
//	x = 0;
//
//	while (x < row && y>= 0)
//	{
//		if (arr[x][y] > k)
//		{
//			y--;
//		}
//		else if (arr[x][y] < k)
//		{
//			x++;
//		}
//		else
//		{
//			return 1;
//		}
//	}
//	return 0;
//		
//}
//int main()
//{
//	int row = 3;
//	int col = 4;
//	int k = 12;
//	int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
//	int n = find(arr,k,row,col-1);
//	if (n == 1)
//	{
//		printf("存在\n");
//	}
//	else
//	{
//		printf("不存在\n");
//
//	}
//}


//谁是凶手
//int main()
//{
//	char target;
//	for (target = 'a'; target <= 'd' ; target++)
//	{
//		if (((target != 'a') + (target == 'c') + (target == 'd') + (target != 'd')) == 3)
//		{
//			printf("%c", target);
//		}
//	}
//}
// 


//杨辉三角的打印
//void Pascal_triangle(int arr[][100],int n)
//{
//	int i = 0;
//	int j = 0;
//	for (i = 1; i < n; i++)
//	{
//		arr[i][0] = 1;
//		arr[i][i] = 1;
//		for (j = 1; j < i ; j++)
//		{
//			arr[i][j] = arr[i - 1][j-1] + arr[i - 1][j];
//		}
//	}
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j <= i; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//}
//int main()
//{
//	int arr[100][100] = { 1 };
//	int n = 0;
//	scanf("%d", &n);
//	Pascal_triangle(arr,n);
//	return 0;
//}



//转移表
//void Add(int a, int b)
//{
//	int r= a + b;
//	printf("%d\n", r);
//}
//void Sub(int a, int b)
//{
//	int r = a - b;
//	printf("%d\n", r);
//}
//void Div(int a, int b)
//{
//	int r = a * b;
//	printf("%d\n", r);
//}
//void Mul(int a, int b)
//{
//	int r = a / b;
//	printf("%d\n", r);
//}
//
//void menu()
//{
//	printf("********************\n");
//	printf("***1.Add    2.Sub***\n");
//	printf("***3.div    4.mul***\n");
//	printf("********************\n");
//
//}
//int main()
//{
//	void (*pl[])(int, int) = {NULL, Add ,Sub ,Div ,Mul };
//	int input = 0;
//	int a = 0;
//	int b = 0;
//	do
//	{
//		menu();
//		printf("请选择\n");
//		scanf("%d", &input);
//		if (input == 0)
//		{
//			printf("退出计算器\n");
//		}
//		else if(input>=1&&input<=4)
//		{
//
//			printf("请输入两个操作数\n");
//			scanf("%d%d", &a, &b);
//			pl[input](a, b);
//		}
//		else
//		{
//			printf("输入错误，请重新输入！\n");
//		}
//
//	} while (input);
//	return 0;
//}


////字符串的旋转
//void stringround(char arr[], int k)
//{
//	char tmp[200] = { 0 };
//	int len = strlen(arr);
//	int time = k % len;
//	strcpy(tmp, arr + time);
//	strncat(tmp, arr, time);
//	strcpy(arr, tmp);
//}

//void Reverse(char arr[], int left, int right)
//{
//	while (left < right)
//	{
//		char tmp = arr[left];
//		arr[left] = arr[right];
//		arr[right] = tmp;
//		left++;
//		right--;
//	}
//}
//void Reverse2(char arr[], int k )
//{
//	int len = strlen(arr);
//	int time = k % len;
//	Reverse(arr, 0, time-1);
//	Reverse(arr, time , len - 1);
//	Reverse(arr, 0, len - 1);
//}
//
//int main()
//{
//	char arr[256] = { 0 };
//	int len = strlen(arr);
//	while (gets_s(arr)!=NULL)
//	{
//		int k = 0;
//		scanf("%d", &k);
//		stringround(arr, k);
//		Reverse2(arr, k );
//		printf("%s\n", arr);
//	}
//	return 0;
//}

////找单身狗2
//void single_find(int arr[], int sz)
//{
//	int* start = arr;
//	int i = 0;
//	for(i=0;i<sz;i++)
//	{
//		int flag = 1;
//		for (start = arr; start < &arr[sz]; start++)
//		{
//			if (*start == arr[i]&& start!=&arr[i])
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag)
//		{
//			printf("%d ", arr[i]);
//		}
//	}
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	single_find(arr, sz);
//	return 0;
//}

//#include <stdio.h>
//int is_leap_year(int y)
//{
//    if ((y % 4 == 0 && y && 100 != 0) || y % 400 == 0)
//        return 1;
//    else
//        return 0;
//}
//void find_days(int y, int m)
//{
//    int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//    if (is_leap_year(y))
//    {
//        arr[2] = 29;
//    }
//    printf("%d ", arr[m]);
//}
//int main()
//{
//    int y = 0;
//    int m = 0;
//    while (scanf("%d%d", &y, &m) != EOF)
//    {
//        int days = find_days(y, m);
//    }
//}